using System;
using System.Collections.Generic;

namespace C3.Proto.Core.Model
{
    public class StateResults
    {
        public int ROCIPCount { get; set; }
        public int ROCIPProjects { get; set; }
        public int OFPCCount { get; set; }
        public int OFPCProjects { get; set; }
        public int GCCount { get; set; }
        public int GCProjects { get; set; }
        
        public IList<Deficiencies> CategoryDeficiencies { get; set; }
        public IList<Deficiencies> GeneralDeficiencies { get; set; }

        public int GCSeverityA { get; set; }
        public int GCSeverityB { get; set; }
        public int GCSeverityC { get; set; }
        public int GCSeverityD { get; set; }

        public int OFPCSeverityA { get; set; }
        public int OFPCSeverityB { get; set; }
        public int OFPCSeverityC { get; set; }
        public int OFPCSeverityD { get; set; }

        public int ROCIPSeverityA { get; set; }
        public int ROCIPSeverityB { get; set; }
        public int ROCIPSeverityC { get; set; }
        public int ROCIPSeverityD { get; set; }

        public IList<Claim> Claims { get; set; }

        public IDictionary<string, int> Injuries { get; set; }
        public IDictionary<string, int> Accidents { get; set; }
    }

    public class Deficiencies
    {
        public string Category { get; set; }
        public double ROCIP { get; set; }
        public double GC { get; set; }
        public double OFPC { get; set; }
    }
    
    public class GCProjects
    {
        public string Project { get; set; }
        public string Institute { get; set; }
        public int Inspections { get; set; }
        
    }

    public class RegionResults
    {
        public IList<GCProjects> GCProjects { get; set; }
        public IDictionary<string, int> DefeciencyTypes { get; set; }
        public int GCSeverityA { get; set; }
        public int GCSeverityB { get; set; }
        public int GCSeverityC { get; set; }
        public int GCSeverityD { get; set; }

        public int OFPCSeverityA { get; set; }
        public int OFPCSeverityB { get; set; }
        public int OFPCSeverityC { get; set; }
        public int OFPCSeverityD { get; set; }

        public int ROCIPSeverityA { get; set; }
        public int ROCIPSeverityB { get; set; }
        public int ROCIPSeverityC { get; set; }
        public int ROCIPSeverityD { get; set; }

        public IList<Claim> Claims { get; set; }

    }

    public class ProjectResults
    {
        public IList<MonthlyTotal> ROCIP { get; set; }
        public IList<MonthlyTotal> GC { get; set; }
        public IList<MonthlyTotal> OFPC { get; set; }

        public IList<BiMonthlyTotal> ROCIPB { get; set; }
        public IList<BiMonthlyTotal> GCB { get; set; }
        public IList<BiMonthlyTotal> OFPCB { get; set; }
        
        public IList<Step> Steps { get; set; }
        public IList<ManHour> ManHours { get; set; }
        public IList<MonthlyClaim> Claims { get; set; }

        public int GCSeverityA { get; set; }
        public int GCSeverityB { get; set; }
        public int GCSeverityC { get; set; }
        public int GCSeverityD { get; set; }

        public int OFPCSeverityA { get; set; }
        public int OFPCSeverityB { get; set; }
        public int OFPCSeverityC { get; set; }
        public int OFPCSeverityD { get; set; }

        public int ROCIPSeverityA { get; set; }
        public int ROCIPSeverityB { get; set; }
        public int ROCIPSeverityC { get; set; }
        public int ROCIPSeverityD { get; set; }

        public string Project { get; set; }

        public RIR RIR { get; set; }
        public IList<LaborHour> Labor { get; set; }

        public double YearTotal { get; set; }
        public double YearTotal1 { get; set; }
        public double YearTotal2 { get; set; }
        public int YearCount { get; set; }
        public int YearCount1 { get; set; }
        public int YearCount2 { get; set; }

        
    }

    public class MonthlyClaim
    {
        public double Amount { get; set; }
        public int Count { get; set; }
    }

    public class MonthlyTotal
    {
        public string Name { get; set; }
        public int Total { get; set; }
    }

    public class BiMonthlyTotal
    {
        public string Name { get; set; }
        public int Total { get; set; }
    }
}